#ifndef _COMUNICACION_H
#define _COMUNICACION_H

#include <stdlib.h>
#include <semaphore.h>
#include <pthread.h>
#include <stdint.h>

#include <string.h>
#include <errno.h>

#include "bib_Log.h"
#include "bib_Socket.h"
#include "fileSystem.h"
#include "bib_Abrir_Configuracion.h"

#define TAM_BLOQUE	1	/*En cant. de clusters*/
#define TAM_CLUSTER 8	/*En cant. de sectores*/
#define TAM_SECTOR 	512	/*En bytes*/

#define LECTURA			1
#define ESCRITURA		2

#define SOLICITUD_MIN (uint32_t)0
#define SOLICITUD_MAX (uint32_t)2500000000

typedef struct PAYLOAD_LECTURA{
	uint32_t	id;
	uint32_t	sector;
} PAYLOAD_LECTURA;

typedef struct PAYLOAD_RESPUESTA_LECTURA{
	uint32_t	id;
	char		buffer[TAM_SECTOR];
} PAYLOAD_RESPUESTA_LECTURA;

typedef struct PAYLOAD_ESCRITURA{
	uint32_t	id;
	uint32_t	sector;
	char		buffer[TAM_SECTOR];
} PAYLOAD_ESCRITURA;

int inicializarSemaforos(void);

int crearBuffer(void);
int liberarBuffer(void);

int obtenerIdBloqueLibre(char *idBloque);
int liberarIdBuffer(char idBloque);

int getBloque(int num, char **bufBloque, char *idBloque);
int getCluster(int num, char *bufCluster);
int getSector(int num, char *bufSector);

int setBloque(int num, char idBloque);
int setCluster(int num, char *bufCluster);
int setSector(int num, char *bufSector);

#endif
